# -*- coding: utf-8 -*-
# @Time    : 2024/3/10 11:47
# @Author  : xh
# @FileName: handle_log.py
# @Software: PyCharm

import logging
from datetime import datetime
from common.handle_path import LOG_DIR
from common.handle_yaml import HandleYaml

class HandleLog:
    def __init__(self, log_config_path: str) -> None:
        """
        初始化 HandleLog 实例并加载日志配置
        :param log_config_path: YAML 配置文件路径
        """
        # 加载日志配置
        self.log_config = HandleYaml(log_config_path).get_value("log")

    def create_logger(self) -> logging.Logger:
        """
        根据 YAML 配置创建并返回一个日志记录器

        :return: 配置好的 logging.Logger 实例
        """
        # 创建日志记录器
        logger = logging.getLogger(self.log_config["name"])
        logger.setLevel(self.log_config["level"].upper())

        # 配置控制台日志输出
        self._add_console_handler(logger)

        # 配置文件日志输出
        if self.log_config["filename"]:
            self._add_file_handler(logger)
        
        return logger
        
    def _add_console_handler(self, logger: logging.Logger) -> None:
        """
        配置并添加控制台输出处理器

        :param logger: 要配置的 logging.Logger 实例
        """
        console_handler = logging.StreamHandler()
        console_handler.setLevel(self.log_config["sh_level"].upper())
        console_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
        logger.addHandler(console_handler)

    def _add_file_handler(self, logger: logging.Logger) -> None:
        """
        配置并添加文件输出处理器

        :param logger: 要配置的 logging.Logger 实例
        """
        # 创建日志目录
        LOG_DIR.mkdir(exist_ok=True)

        # 使用当前日期作为日志文件名
        current_date = datetime.now().strftime('%Y-%m-%d')
        log_filename = LOG_DIR / f"{current_date}.log"

        file_handler = logging.FileHandler(log_filename)
        file_handler.setLevel(self.log_config["fh_level"].upper())
        file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
        logger.addHandler(file_handler)

mylog = HandleLog(r"log_config.yaml").create_logger()
if __name__ == '__main__':
    mylog.info("dddddd")
    mylog.info("dddddwwd")
    mylog.info("dddddd")